我是否使用|是否重要 或|| 作为一个或运营商?两者似乎都可以互换.
function Sum(num, sum) {
sum = sum | 0;
return sum;
}
function SumII(num, sum) {
sum = sum || 0;
return sum;
}
console.log(Sum(7));
//0
console.log(SumII(7));
//0
是的,存在巨大差异.
运算符|
是按位运算符 或.
我引用链接的文档:
在每个位位置返回一个位,其中一个或两个操作数的相应位是1.
因此,通过使用带有两个数字的运算符,将为您提供另一个由前两个数字构建的数字.
运营商||
是逻辑运营商 或.
它将其操作数计算为布尔值(如果需要,可以想象为隐式转换),并以原始形式返回第一个真值.
碰巧对于某些操作,结果是相同的(例如,如果在保护中使用,其中应用运算符的结果被视为布尔值),无论您决定使用哪个运算符,但它将是更好地了解它们之间的区别.
逻辑运算
使用||
和&&
替代|
和&
由于第一批使用"短路"的机制.因此,它们更有效(并且更安全),因为如果左项已经被评估为true
/ false
,则在不评估最后项的情况下知道结果.
例如:(对于未定义的x)
true | x // ReferenceError: x is not defined true || x // true false & x // ReferenceError: x is not defined false && x // false
比特运营
使用|
和&
.
例如:
4|2
回报 6
4 = 100b
2 = 010b
6 = 110b
(参见每列的OR运算:1 OR 0 = 1,0或1 = 1,0或0 = 0)
4||2
回报 4
4
是一个"真"值(因为它不是0
,false
,null
,""
,undefined
或NaN
)=>结果不依赖于比特值=>操作员不会逐位